<?xml version='1.0' encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <link href="cpip.css" rel="stylesheet" type="text/css" />
    <title>File: /usr/include/c++/4.2.1/bits/os_defines.h</title>
  </head>
  <body>
    <h1>File: /usr/include/c++/4.2.1/bits/os_defines.h</h1>
    <p>Green shading in the line number column
means the source is part of the translation unit, red means it is conditionally excluded.
Highlighted line numbers link to the translation unit page. Highlighted macros link to
the macro page.</p>
    <pre><a name="1" /><span class="True">       1:</span> <span class="l">// Specific definitions for Darwin -*- C++ -*-</span>
<a name="2" /><span class="True">       2:</span> 
<a name="3" /><span class="True">       3:</span> <span class="l">// Copyright (C) 2004 Free Software Foundation, Inc.</span>
<a name="4" /><span class="True">       4:</span> <span class="l">//</span>
<a name="5" /><span class="True">       5:</span> <span class="l">// This file is part of the GNU ISO C++ Library.  This library is free</span>
<a name="6" /><span class="True">       6:</span> <span class="l">// software; you can redistribute it and/or modify it under the</span>
<a name="7" /><span class="True">       7:</span> <span class="l">// terms of the GNU General Public License as published by the</span>
<a name="8" /><span class="True">       8:</span> <span class="l">// Free Software Foundation; either version 2, or (at your option)</span>
<a name="9" /><span class="True">       9:</span> <span class="l">// any later version.</span>
<a name="10" /><span class="True">      10:</span> 
<a name="11" /><span class="True">      11:</span> <span class="l">// This library is distributed in the hope that it will be useful,</span>
<a name="12" /><span class="True">      12:</span> <span class="l">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<a name="13" /><span class="True">      13:</span> <span class="l">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
<a name="14" /><span class="True">      14:</span> <span class="l">// GNU General Public License for more details.</span>
<a name="15" /><span class="True">      15:</span> 
<a name="16" /><span class="True">      16:</span> <span class="l">// You should have received a copy of the GNU General Public License along</span>
<a name="17" /><span class="True">      17:</span> <span class="l">// with this library; see the file COPYING.  If not, write to the Free</span>
<a name="18" /><span class="True">      18:</span> <span class="l">// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,</span>
<a name="19" /><span class="True">      19:</span> <span class="l">// USA.</span>
<a name="20" /><span class="True">      20:</span> 
<a name="21" /><span class="True">      21:</span> <span class="l">// As a special exception, you may use this file as part of a free software</span>
<a name="22" /><span class="True">      22:</span> <span class="l">// library without restriction.  Specifically, if other files instantiate</span>
<a name="23" /><span class="True">      23:</span> <span class="l">// templates or use macros or inline functions from this file, or you compile</span>
<a name="24" /><span class="True">      24:</span> <span class="l">// this file and link it with other files to produce an executable, this</span>
<a name="25" /><span class="True">      25:</span> <span class="l">// file does not by itself cause the resulting executable to be covered by</span>
<a name="26" /><span class="True">      26:</span> <span class="l">// the GNU General Public License.  This exception does not however</span>
<a name="27" /><span class="True">      27:</span> <span class="l">// invalidate any other reasons why the executable file might be covered by</span>
<a name="28" /><span class="True">      28:</span> <span class="l">// the GNU General Public License.</span>
<a name="29" /><span class="True">      29:</span> 
<a name="30" /><span class="True">      30:</span> 
<a name="31" /><span class="True">      31:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_noref.html#_X0dMSUJDWFhfT1NfREVGSU5FU18w"><span class="b">_GLIBCXX_OS_DEFINES</span></a>
<a name="32" /><span class="True">      32:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X0dMSUJDWFhfT1NfREVGSU5FU18w"><span class="b">_GLIBCXX_OS_DEFINES</span></a> <span class="c">1</span>
<a name="33" /><span class="True">      33:</span> 
<a name="34" /><span class="True">      34:</span> <span class="l">// System-specific #define, typedefs, corrections, etc, go here.  This</span>
<a name="35" /><span class="True">      35:</span> <span class="l">// file will come before all others.</span>
<a name="36" /><span class="True">      36:</span> 
<a name="37" /><span class="True">      37:</span> <span class="k">/* Darwin has the pthread routines in libSystem, which every program</span>
<a name="38" /><span class="True">      38:</span> <span class="k">   links to, so there&apos;s no need for weak-ness for that.  */</span>
<a name="39" /><span class="True">      39:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X0dMSUJDWFhfR1RIUkVBRF9VU0VfV0VBS18w"><span class="b">_GLIBCXX_GTHREAD_USE_WEAK</span></a> <span class="c">0</span>
<a name="40" /><span class="True">      40:</span> 
<a name="41" /><span class="True">      41:</span> <span class="l">// On Darwin, in order to enable overriding of operator new and delete,</span>
<a name="42" /><span class="True">      42:</span> <span class="l">// GCC makes the definition of these functions weak, relies on the</span>
<a name="43" /><span class="True">      43:</span> <span class="l">// loader to implement weak semantics properly, and uses</span>
<a name="44" /><span class="True">      44:</span> <span class="l">// -flat_namespace to work around the way that it doesn&apos;t.</span>
<a name="45" /><span class="True">      45:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X0dMSUJDWFhfV0VBS19ERUZJTklUSU9OXzA_"><span class="b">_GLIBCXX_WEAK_DEFINITION</span></a> <span class="b">__attribute__</span> <span class="f">(</span><span class="f">(</span><span class="b">weak</span><span class="f">)</span><span class="f">)</span>
<a name="46" /><span class="True">      46:</span> 
<a name="47" /><span class="True">      47:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_ref.html#_X0dMSUJDWFhfVklTSUJJTElUWV9ERUZBVUxUXzA_"><span class="b">_GLIBCXX_VISIBILITY_DEFAULT</span></a>
<a name="48" /><span class="True">      48:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X0dMSUJDWFhfVklTSUJJTElUWV9ERUZBVUxUXzA_"><span class="b">_GLIBCXX_VISIBILITY_DEFAULT</span></a> <span class="k">/* _GLIBCXX_VISIBILITY(default) */</span>
<a name="49" /><span class="True">      49:</span> <span class="f">#</span><span class="n">endif</span>
<a name="50" /><span class="True">      50:</span> 
<a name="51" /><span class="True">      51:</span> <span class="k">/* APPLE LOCAL begin dtrace 6144676 */</span>
<a name="52" /><span class="True">      52:</span> <span class="k">/* Enable dtrace probes.  */</span>
<a name="53" /><span class="True">      53:</span> <span class="k">/* Inline copy of dtrace_cxa_runtime.h. */</span>
<a name="54" /><span class="True">      54:</span> <span class="k">/*</span>
<a name="55" /><span class="True">      55:</span> <span class="k"> * Generated by dtrace(1M).</span>
<a name="56" /><span class="True">      56:</span> <span class="k"> */</span>
<a name="57" /><span class="True">      57:</span> 
<a name="58" /><span class="True">      58:</span> <span class="f">#</span><span class="n">ifndef</span>    <a href="cpu.c_macros_noref.html#_X0RUUkFDRV9DWEFfUlVOVElNRV9IXzA_"><span class="b">_DTRACE_CXA_RUNTIME_H</span></a>
<a name="59" /><span class="True">      59:</span> <span class="f">#</span><span class="n">define</span>    <a href="cpu.c_macros_noref.html#_X0RUUkFDRV9DWEFfUlVOVElNRV9IXzA_"><span class="b">_DTRACE_CXA_RUNTIME_H</span></a>
<a name="60" /><span class="True">      60:</span> 
<a name="61" /><span class="True">      61:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">unistd</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="62" /><span class="True">      62:</span> <span class="k">/* APPLE LOCAL begin version */</span>
<a name="63" /><span class="True">      63:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">Availability</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="64" /><span class="True">      64:</span> <span class="k">/* APPLE LOCAL end version */</span>
<a name="65" /><span class="True">      65:</span> 
<a name="66" /><span class="False">      66:</span> <span class="f">#</span><span class="n">ifdef</span>    <span class="b">__cplusplus</span>
<a name="67" /><span class="False">      67:</span> <span class="m">extern</span> <span class="e">&quot;C&quot;</span> <span class="f">{</span>
<a name="68" /><span class="True">      68:</span> <span class="f">#</span><span class="n">endif</span>
<a name="69" /><span class="True">      69:</span> 
<a name="70" /><span class="True">      70:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_Q1hBX1JVTlRJTUVfU1RBQklMSVRZXzA_"><span class="b">CXA_RUNTIME_STABILITY</span></a> <span class="e">&quot;___dtrace_stability$cxa_runtime$v1$1_1_0_1_1_0_1_1_0_1_1_0_1_1_0&quot;</span>
<a name="71" /><span class="True">      71:</span> 
<a name="72" /><span class="True">      72:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_Q1hBX1JVTlRJTUVfVFlQRURFRlNfMA__"><span class="b">CXA_RUNTIME_TYPEDEFS</span></a> <span class="e">&quot;___dtrace_typedefs$cxa_runtime$v2&quot;</span>
<a name="73" /><span class="True">      73:</span> 
<a name="74" /><span class="True">      74:</span> <span class="f">#</span><span class="n">define</span>    <a href="cpu.c_macros_noref.html#_Q1hBX1JVTlRJTUVfQ1hBX0VYQ0VQVElPTl9SRVRIUk9XXzA_"><span class="b">CXA_RUNTIME_CXA_EXCEPTION_RETHROW</span></a><span class="f">(</span><span class="f">)</span> \
<a name="75" /><span class="True">      75:</span> <span class="m">do</span> <span class="f">{</span> \
<a name="76" /><span class="True">      76:</span>     <span class="b">__asm__</span> <span class="m">volatile</span><span class="f">(</span><span class="e">&quot;.reference &quot;</span> <a href="cpu.c_macros_noref.html#_Q1hBX1JVTlRJTUVfVFlQRURFRlNfMA__"><span class="b">CXA_RUNTIME_TYPEDEFS</span></a><span class="f">)</span><span class="f">;</span> \
<a name="77" /><span class="True">      77:</span>     <span class="b">__dtrace_probe</span><span class="g">$</span><span class="b">cxa_runtime</span><span class="g">$</span><span class="b">cxa_exception_rethrow</span><span class="g">$</span><span class="b">v1</span><span class="f">(</span><span class="f">)</span><span class="f">;</span> \
<a name="78" /><span class="True">      78:</span>     <span class="b">__asm__</span> <span class="m">volatile</span><span class="f">(</span><span class="e">&quot;.reference &quot;</span> <a href="cpu.c_macros_noref.html#_Q1hBX1JVTlRJTUVfU1RBQklMSVRZXzA_"><span class="b">CXA_RUNTIME_STABILITY</span></a><span class="f">)</span><span class="f">;</span> \
<a name="79" /><span class="True">      79:</span> <span class="f">}</span> <span class="m">while</span> <span class="f">(</span><span class="c">0</span><span class="f">)</span>
<a name="80" /><span class="True">      80:</span> <span class="f">#</span><span class="n">define</span>    <a href="cpu.c_macros_noref.html#_Q1hBX1JVTlRJTUVfQ1hBX0VYQ0VQVElPTl9SRVRIUk9XX0VOQUJMRURfMA__"><span class="b">CXA_RUNTIME_CXA_EXCEPTION_RETHROW_ENABLED</span></a><span class="f">(</span><span class="f">)</span> \
<a name="81" /><span class="True">      81:</span>     <span class="b">__dtrace_isenabled</span><span class="g">$</span><span class="b">cxa_runtime</span><span class="g">$</span><span class="b">cxa_exception_rethrow</span><span class="g">$</span><span class="b">v1</span><span class="f">(</span><span class="f">)</span>
<a name="82" /><span class="True">      82:</span> <span class="f">#</span><span class="n">define</span>    <a href="cpu.c_macros_noref.html#_Q1hBX1JVTlRJTUVfQ1hBX0VYQ0VQVElPTl9USFJPV18w"><span class="b">CXA_RUNTIME_CXA_EXCEPTION_THROW</span></a><span class="f">(</span><span class="b">arg0</span><span class="f">)</span> \
<a name="83" /><span class="True">      83:</span> <span class="m">do</span> <span class="f">{</span> \
<a name="84" /><span class="True">      84:</span>     <span class="b">__asm__</span> <span class="m">volatile</span><span class="f">(</span><span class="e">&quot;.reference &quot;</span> <a href="cpu.c_macros_noref.html#_Q1hBX1JVTlRJTUVfVFlQRURFRlNfMA__"><span class="b">CXA_RUNTIME_TYPEDEFS</span></a><span class="f">)</span><span class="f">;</span> \
<a name="85" /><span class="True">      85:</span>     <span class="b">__dtrace_probe</span><span class="g">$</span><span class="b">cxa_runtime</span><span class="g">$</span><span class="b">cxa_exception_throw</span><span class="g">$</span><span class="b">v1</span><span class="g">$</span><span class="c">766f6964202a</span><span class="f">(</span><span class="b">arg0</span><span class="f">)</span><span class="f">;</span> \
<a name="86" /><span class="True">      86:</span>     <span class="b">__asm__</span> <span class="m">volatile</span><span class="f">(</span><span class="e">&quot;.reference &quot;</span> <a href="cpu.c_macros_noref.html#_Q1hBX1JVTlRJTUVfU1RBQklMSVRZXzA_"><span class="b">CXA_RUNTIME_STABILITY</span></a><span class="f">)</span><span class="f">;</span> \
<a name="87" /><span class="True">      87:</span> <span class="f">}</span> <span class="m">while</span> <span class="f">(</span><span class="c">0</span><span class="f">)</span>
<a name="88" /><span class="True">      88:</span> <span class="f">#</span><span class="n">define</span>    <a href="cpu.c_macros_noref.html#_Q1hBX1JVTlRJTUVfQ1hBX0VYQ0VQVElPTl9USFJPV19FTkFCTEVEXzA_"><span class="b">CXA_RUNTIME_CXA_EXCEPTION_THROW_ENABLED</span></a><span class="f">(</span><span class="f">)</span> \
<a name="89" /><span class="True">      89:</span>     <span class="b">__dtrace_isenabled</span><span class="g">$</span><span class="b">cxa_runtime</span><span class="g">$</span><span class="b">cxa_exception_throw</span><span class="g">$</span><span class="b">v1</span><span class="f">(</span><span class="f">)</span>
<a name="90" /><span class="True">      90:</span> 
<a name="91" /><span class="True">      91:</span> 
<a name="92" /><span class="True">      92:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">__dtrace_probe</span><span class="g">$</span><span class="b">cxa_runtime</span><span class="g">$</span><span class="b">cxa_exception_rethrow</span><span class="g">$</span><span class="b">v1</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="93" /><span class="True">      93:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">__dtrace_isenabled</span><span class="g">$</span><span class="b">cxa_runtime</span><span class="g">$</span><span class="b">cxa_exception_rethrow</span><span class="g">$</span><span class="b">v1</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="94" /><span class="True">      94:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">__dtrace_probe</span><span class="g">$</span><span class="b">cxa_runtime</span><span class="g">$</span><span class="b">cxa_exception_throw</span><span class="g">$</span><span class="b">v1</span><span class="g">$</span><span class="c">766f6964202a</span><span class="f">(</span><span class="m">void</span> <span class="f">*</span><span class="f">)</span><span class="f">;</span>
<a name="95" /><span class="True">      95:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">__dtrace_isenabled</span><span class="g">$</span><span class="b">cxa_runtime</span><span class="g">$</span><span class="b">cxa_exception_throw</span><span class="g">$</span><span class="b">v1</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="96" /><span class="True">      96:</span> 
<a name="97" /><span class="False">      97:</span> <span class="f">#</span><span class="n">ifdef</span>    <span class="b">__cplusplus</span>
<a name="98" /><span class="False">      98:</span> <span class="f">}</span>
<a name="99" /><span class="True">      99:</span> <span class="f">#</span><span class="n">endif</span>
<a name="100" /><span class="True">     100:</span> 
<a name="101" /><span class="True">     101:</span> <span class="f">#</span><span class="n">endif</span>    <span class="k">/* _DTRACE_CXA_RUNTIME_H */</span>
<a name="102" /><span class="True">     102:</span> <span class="k">/* APPLE LOCAL end dtrace 6144676 */</span>
<a name="103" /><span class="True">     103:</span> 
<a name="104" /><span class="True">     104:</span> <span class="k">/* APPLE LOCAL begin version */</span>
<a name="105" /><span class="True">     105:</span> 
<a name="106" /><span class="True">     106:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_noref.html#_X19HTlVDX0xJQlNURF9fXzA_"><span class="b">__GNUC_LIBSTD__</span></a>
<a name="107" /><span class="True">     107:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19HTlVDX0xJQlNURF9fXzA_"><span class="b">__GNUC_LIBSTD__</span></a> <span class="c">4</span>
<a name="108" /><span class="True">     108:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19HTlVDX0xJQlNURF9NSU5PUl9fXzA_"><span class="b">__GNUC_LIBSTD_MINOR__</span></a> <span class="c">2</span>
<a name="109" /><span class="True">     109:</span> <span class="f">#</span><span class="n">endif</span>
<a name="110" /><span class="True">     110:</span> 
<a name="111" /><span class="False">     111:</span> <span class="f">#</span><span class="n">if</span> <span class="b">__IPHONE_OS_VERSION_MIN_REQUIRED</span>
<a name="112" /><span class="False">     112:</span>     <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19UQVJHRVRJTkdfNF8wX0RZTElCXzA_"><span class="b">__TARGETING_4_0_DYLIB</span></a>  <span class="c">0</span>
<a name="113" /><span class="True">     113:</span> <span class="f">#</span><span class="n">else</span> 
<a name="114" /><span class="True">     114:</span>     <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19UQVJHRVRJTkdfNF8wX0RZTElCXzA_"><span class="b">__TARGETING_4_0_DYLIB</span></a> <span class="f">(</span><span class="b">__MAC_OS_X_VERSION_MIN_REQUIRED</span> <span class="f">&lt;</span> <span class="c">1060</span><span class="f">)</span>
<a name="115" /><span class="True">     115:</span> <span class="f">#</span><span class="n">endif</span>
<a name="116" /><span class="True">     116:</span> 
<a name="117" /><span class="True">     117:</span> <span class="k">/* APPLE LOCAL end version */</span>
<a name="118" /><span class="True">     118:</span> 
<a name="119" /><span class="True">     119:</span> <span class="k">/* APPLE LOCAL begin keymgr */</span>
<a name="120" /><span class="False">     120:</span> <span class="f">#</span><span class="n">if</span> <span class="b">defined</span><span class="f">(</span><span class="b">__APPLE__</span><span class="f">)</span> <span class="f">&amp;&amp;</span> <span class="b">defined</span><span class="f">(</span><span class="b">__ppc__</span><span class="f">)</span> <span class="f">&amp;&amp;</span> <span class="b">defined</span><span class="f">(</span><span class="b">PIC</span><span class="f">)</span>
<a name="121" /><span class="False">     121:</span> <span class="k">/* Copyright (C) 1989, 92-97, 1998, Free Software Foundation, Inc.</span>
<a name="122" /><span class="False">     122:</span> <span class="k"></span>
<a name="123" /><span class="False">     123:</span> <span class="k">This file is part of GNU CC.</span>
<a name="124" /><span class="False">     124:</span> <span class="k"></span>
<a name="125" /><span class="False">     125:</span> <span class="k">GNU CC is free software; you can redistribute it and/or modify</span>
<a name="126" /><span class="False">     126:</span> <span class="k">it under the terms of the GNU General Public License as published by</span>
<a name="127" /><span class="False">     127:</span> <span class="k">the Free Software Foundation; either version 2, or (at your option)</span>
<a name="128" /><span class="False">     128:</span> <span class="k">any later version.</span>
<a name="129" /><span class="False">     129:</span> <span class="k"></span>
<a name="130" /><span class="False">     130:</span> <span class="k">GNU CC is distributed in the hope that it will be useful,</span>
<a name="131" /><span class="False">     131:</span> <span class="k">but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<a name="132" /><span class="False">     132:</span> <span class="k">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
<a name="133" /><span class="False">     133:</span> <span class="k">GNU General Public License for more details.</span>
<a name="134" /><span class="False">     134:</span> <span class="k"></span>
<a name="135" /><span class="False">     135:</span> <span class="k">You should have received a copy of the GNU General Public License</span>
<a name="136" /><span class="False">     136:</span> <span class="k">along with GNU CC; see the file COPYING.  If not, write to</span>
<a name="137" /><span class="False">     137:</span> <span class="k">the Free Software Foundation, 59 Temple Place - Suite 330,</span>
<a name="138" /><span class="False">     138:</span> <span class="k">Boston, MA 02111-1307, USA.  */</span>
<a name="139" /><span class="False">     139:</span> 
<a name="140" /><span class="False">     140:</span> 
<a name="141" /><span class="False">     141:</span> <span class="k">/*</span>
<a name="142" /><span class="False">     142:</span> <span class="k"> * This file added by Apple Computer Inc. for its OS X </span>
<a name="143" /><span class="False">     143:</span> <span class="k"> * environment.</span>
<a name="144" /><span class="False">     144:</span> <span class="k"> */</span>
<a name="145" /><span class="False">     145:</span> 
<a name="146" /><span class="False">     146:</span> <span class="f">#</span><span class="n">ifndef</span> <span class="b">__KEYMGR_H</span>
<a name="147" /><span class="False">     147:</span> <span class="f">#</span><span class="n">define</span> <span class="b">__KEYMGR_H</span>
<a name="148" /><span class="False">     148:</span> 
<a name="149" /><span class="False">     149:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">__cplusplus</span>
<a name="150" /><span class="False">     150:</span> <span class="m">extern</span> <span class="e">&quot;C&quot;</span> <span class="f">{</span>
<a name="151" /><span class="False">     151:</span> <span class="f">#</span><span class="n">endif</span>
<a name="152" /><span class="False">     152:</span> 
<a name="153" /><span class="False">     153:</span> 
<a name="154" /><span class="False">     154:</span> 
<a name="155" /><span class="False">     155:</span> <span class="k">/*</span>
<a name="156" /><span class="False">     156:</span> <span class="k"> * keymgr - Create and maintain process-wide global data known to </span>
<a name="157" /><span class="False">     157:</span> <span class="k"> *        all threads across all dynamic libraries. </span>
<a name="158" /><span class="False">     158:</span> <span class="k"> *</span>
<a name="159" /><span class="False">     159:</span> <span class="k"> */</span>
<a name="160" /><span class="False">     160:</span>  
<a name="161" /><span class="False">     161:</span> <span class="m">typedef</span> <span class="m">enum</span> <span class="b">node_kinds</span> <span class="f">{</span>
<a name="162" /><span class="False">     162:</span>     <span class="b">NODE_THREAD_SPECIFIC_DATA</span><span class="f">=</span><span class="c">1</span><span class="f">,</span>
<a name="163" /><span class="False">     163:</span>     <span class="b">NODE_PROCESSWIDE_PTR</span><span class="f">=</span><span class="c">2</span><span class="f">,</span>
<a name="164" /><span class="False">     164:</span>     <span class="b">NODE_LAST_KIND</span>
<a name="165" /><span class="False">     165:</span>     <span class="f">}</span> <span class="b">TnodeKind</span> <span class="f">;</span>
<a name="166" /><span class="False">     166:</span>     
<a name="167" /><span class="False">     167:</span> <span class="k">/*</span>
<a name="168" /><span class="False">     168:</span> <span class="k"> * These enum members are bits or combination of bits.</span>
<a name="169" /><span class="False">     169:</span> <span class="k"> */</span>
<a name="170" /><span class="False">     170:</span>     
<a name="171" /><span class="False">     171:</span> <span class="m">typedef</span> <span class="m">enum</span> <span class="b">node_mode</span> <span class="f">{</span>
<a name="172" /><span class="False">     172:</span>     <span class="b">NM_ALLOW_RECURSION</span><span class="f">=</span><span class="c">1</span><span class="f">,</span>
<a name="173" /><span class="False">     173:</span>     <span class="b">NM_RECURSION_ILLEGAL</span><span class="f">=</span><span class="c">2</span><span class="f">,</span>
<a name="174" /><span class="False">     174:</span>     <span class="b">NM_ENHANCED_LOCKING</span><span class="f">=</span><span class="c">3</span><span class="f">,</span>
<a name="175" /><span class="False">     175:</span>     <span class="b">NM_LOCKED</span><span class="f">=</span><span class="c">4</span>
<a name="176" /><span class="False">     176:</span>     <span class="f">}</span> <span class="b">TnodeMode</span> <span class="f">;</span>
<a name="177" /><span class="False">     177:</span> 
<a name="178" /><span class="False">     178:</span> <span class="k">/* WARNING: the return value of _keymgr_set_per_thread_data is </span>
<a name="179" /><span class="False">     179:</span> <span class="k">   not meaningful on Tiger and above.  Use the macro</span>
<a name="180" /><span class="False">     180:</span> <span class="k">   KEYMGR_SET_PER_THREAD_DATA (below) to handle this properly. */</span>
<a name="181" /><span class="False">     181:</span> <span class="m">extern</span> <span class="m">void</span> <span class="f">*</span> <span class="b">_keymgr_get_per_thread_data</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">int</span> <span class="b">key</span><span class="f">)</span> <span class="f">;</span>
<a name="182" /><span class="False">     182:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">_keymgr_set_per_thread_data</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">int</span> <span class="b">key</span><span class="f">,</span> <span class="m">void</span> <span class="f">*</span><span class="b">keydata</span><span class="f">)</span> <span class="f">;</span>
<a name="183" /><span class="False">     183:</span> <span class="m">extern</span> <span class="m">void</span> <span class="f">*</span><span class="b">_keymgr_get_and_lock_processwide_ptr</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">int</span> <span class="b">key</span><span class="f">)</span> <span class="f">;</span>
<a name="184" /><span class="False">     184:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">_keymgr_set_and_unlock_processwide_ptr</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">int</span> <span class="b">key</span><span class="f">,</span> <span class="m">void</span> <span class="f">*</span><span class="b">ptr</span><span class="f">)</span> <span class="f">;</span>
<a name="185" /><span class="False">     185:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">_keymgr_unlock_processwide_ptr</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">int</span> <span class="b">key</span><span class="f">)</span> <span class="f">;</span>
<a name="186" /><span class="False">     186:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">_keymgr_set_lockmode_processwide_ptr</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">int</span> <span class="b">key</span><span class="f">,</span> <span class="m">unsigned</span> <span class="m">int</span> <span class="b">mode</span><span class="f">)</span> <span class="f">;</span>
<a name="187" /><span class="False">     187:</span> <span class="m">extern</span> <span class="m">unsigned</span> <span class="m">int</span>  <span class="b">_keymgr_get_lockmode_processwide_ptr</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">int</span> <span class="b">key</span><span class="f">)</span> <span class="f">;</span>
<a name="188" /><span class="False">     188:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">_keymgr_get_lock_count_processwide_ptr</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">int</span> <span class="b">key</span><span class="f">)</span> <span class="f">;</span>
<a name="189" /><span class="False">     189:</span> 
<a name="190" /><span class="False">     190:</span> <span class="m">extern</span> <span class="m">void</span> <span class="f">*</span><span class="b">__keymgr_global</span><span class="f">[</span><span class="f">]</span><span class="f">;</span>
<a name="191" /><span class="False">     191:</span> <span class="m">typedef</span> <span class="m">struct</span> <span class="b">_Sinfo_Node</span> <span class="f">{</span>
<a name="192" /><span class="False">     192:</span>         <span class="m">unsigned</span> <span class="m">int</span> <span class="b">size</span> <span class="f">;</span>             <span class="k">/*size of this node*/</span>
<a name="193" /><span class="False">     193:</span>         <span class="m">unsigned</span> <span class="m">short</span> <span class="b">major_version</span> <span class="f">;</span>  <span class="k">/*API major version.*/</span>
<a name="194" /><span class="False">     194:</span>         <span class="m">unsigned</span> <span class="m">short</span> <span class="b">minor_version</span> <span class="f">;</span>  <span class="k">/*API minor version.*/</span>
<a name="195" /><span class="False">     195:</span>         <span class="f">}</span> <span class="b">_Tinfo_Node</span> <span class="f">;</span>
<a name="196" /><span class="False">     196:</span> 
<a name="197" /><span class="False">     197:</span> <span class="f">#</span><span class="n">define</span> <span class="b">KEYMGR_VERSION</span> \
<a name="198" /><span class="False">     198:</span>   <span class="f">(</span><span class="b">__keymgr_global</span><span class="f">[</span><span class="c">2</span><span class="f">]</span> <span class="f">?</span> <span class="f">(</span><span class="f">(</span><span class="b">_Tinfo_Node</span> <span class="f">*</span><span class="f">)</span><span class="b">__keymgr_global</span><span class="f">[</span><span class="c">2</span><span class="f">]</span><span class="f">)</span><span class="f">-&gt;</span><span class="b">major_version</span> <span class="f">:</span> <span class="c">0</span><span class="f">)</span>
<a name="199" /><span class="False">     199:</span> 
<a name="200" /><span class="False">     200:</span> <span class="f">#</span><span class="n">define</span> <span class="b">KEYMGR_SET_PER_THREAD_DATA</span><span class="f">(</span><span class="b">key</span><span class="f">,</span> <span class="b">keydata</span><span class="f">)</span>   \
<a name="201" /><span class="False">     201:</span>   <span class="f">(</span><span class="b">KEYMGR_VERSION</span> <span class="f">&gt;=</span> <span class="c">4</span>                             \
<a name="202" /><span class="False">     202:</span>   <span class="f">?</span> <span class="b">_keymgr_set_per_thread_data</span><span class="f">(</span><span class="f">(</span><span class="b">key</span><span class="f">)</span><span class="f">,</span> <span class="f">(</span><span class="b">keydata</span><span class="f">)</span><span class="f">)</span>  \
<a name="203" /><span class="False">     203:</span>   <span class="f">:</span> <span class="f">(</span><span class="b">_keymgr_set_per_thread_data</span><span class="f">(</span><span class="f">(</span><span class="b">key</span><span class="f">)</span><span class="f">,</span> <span class="f">(</span><span class="b">keydata</span><span class="f">)</span><span class="f">)</span><span class="f">,</span> <span class="c">0</span><span class="f">)</span><span class="f">)</span>
<a name="204" /><span class="False">     204:</span> 
<a name="205" /><span class="False">     205:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_ref.html#_TlVMTF8w"><span class="b">NULL</span></a>
<a name="206" /><span class="False">     206:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">__GNUG__</span>
<a name="207" /><span class="False">     207:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_TlVMTF8w"><span class="b">NULL</span></a> <span class="b">__null</span>
<a name="208" /><span class="False">     208:</span> <span class="f">#</span><span class="n">else</span>
<a name="209" /><span class="False">     209:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_TlVMTF8w"><span class="b">NULL</span></a> <span class="c">0</span>
<a name="210" /><span class="False">     210:</span> <span class="f">#</span><span class="n">endif</span>
<a name="211" /><span class="False">     211:</span> <span class="f">#</span><span class="n">endif</span>
<a name="212" /><span class="False">     212:</span> 
<a name="213" /><span class="False">     213:</span> <span class="k">/*</span>
<a name="214" /><span class="False">     214:</span> <span class="k"> * Keys currently in use:</span>
<a name="215" /><span class="False">     215:</span> <span class="k"> */</span>
<a name="216" /><span class="False">     216:</span> 
<a name="217" /><span class="False">     217:</span> <span class="f">#</span><span class="n">define</span> <span class="b">KEYMGR_EH_CONTEXT_KEY</span>        <span class="c">1</span>    <span class="k">/*stores handle for root pointer of exception context node.*/</span>
<a name="218" /><span class="False">     218:</span> 
<a name="219" /><span class="False">     219:</span> <span class="f">#</span><span class="n">define</span> <span class="b">KEYMGR_NEW_HANDLER_KEY</span>        <span class="c">2</span>    <span class="k">/*store handle for new handler pointer.*/</span>
<a name="220" /><span class="False">     220:</span> 
<a name="221" /><span class="False">     221:</span> <span class="f">#</span><span class="n">define</span> <span class="b">KEYMGR_UNEXPECTED_HANDLER_KEY</span>    <span class="c">3</span>    <span class="k">/*store handle for unexpected exception pointer.*/</span>
<a name="222" /><span class="False">     222:</span> 
<a name="223" /><span class="False">     223:</span> <span class="f">#</span><span class="n">define</span> <span class="b">KEYMGR_TERMINATE_HANDLER_KEY</span>    <span class="c">4</span>    <span class="k">/*store handle for terminate handler pointer. */</span>
<a name="224" /><span class="False">     224:</span> 
<a name="225" /><span class="False">     225:</span> <span class="f">#</span><span class="n">define</span> <span class="b">KEYMGR_MODE_BITS</span>        <span class="c">5</span>    <span class="k">/*stores handle for runtime mode bits.*/</span>
<a name="226" /><span class="False">     226:</span> 
<a name="227" /><span class="False">     227:</span> <span class="f">#</span><span class="n">define</span> <span class="b">KEYMGR_IO_LIST</span>            <span class="c">6</span>    <span class="k">/*Root pointer to the list of open streams.*/</span>
<a name="228" /><span class="False">     228:</span> 
<a name="229" /><span class="False">     229:</span> <span class="f">#</span><span class="n">define</span> <span class="b">KEYMGR_IO_STDIN</span>            <span class="c">7</span>    <span class="k">/*GNU stdin.*/</span>
<a name="230" /><span class="False">     230:</span> 
<a name="231" /><span class="False">     231:</span> <span class="f">#</span><span class="n">define</span> <span class="b">KEYMGR_IO_STDOUT</span>        <span class="c">8</span>    <span class="k">/*GNU stdout.*/</span>
<a name="232" /><span class="False">     232:</span> 
<a name="233" /><span class="False">     233:</span> <span class="f">#</span><span class="n">define</span> <span class="b">KEYMGR_IO_STDERR</span>        <span class="c">9</span>    <span class="k">/*GNU stderr.*/</span>
<a name="234" /><span class="False">     234:</span> 
<a name="235" /><span class="False">     235:</span> <span class="f">#</span><span class="n">define</span> <span class="b">KEYMGR_IO_REFCNT</span>        <span class="c">10</span>    <span class="k">/*How many plugins/main program currently using streams.*/</span>
<a name="236" /><span class="False">     236:</span> 
<a name="237" /><span class="False">     237:</span> <span class="f">#</span><span class="n">define</span> <span class="b">KEYMGR_IO_MODE_BITS</span>        <span class="c">11</span>    <span class="k">/*Flags controlling the behavior of C++ I/O.*/</span>
<a name="238" /><span class="False">     238:</span> 
<a name="239" /><span class="False">     239:</span> <span class="f">#</span><span class="n">define</span> <span class="b">KEYMGR_ZOE_IMAGE_LIST</span>        <span class="c">12</span>    <span class="k">/*Head pointer for list of per image dwarf2 unwind sections.*/</span>
<a name="240" /><span class="False">     240:</span> 
<a name="241" /><span class="False">     241:</span> <span class="f">#</span><span class="n">define</span> <span class="b">KEYMGR_EH_GLOBALS_KEY</span>           <span class="c">13</span>      <span class="k">/* Variable used in eh_globals.cc */</span>
<a name="242" /><span class="False">     242:</span> 
<a name="243" /><span class="False">     243:</span> <span class="k">/*</span>
<a name="244" /><span class="False">     244:</span> <span class="k"> * Other important data.</span>
<a name="245" /><span class="False">     245:</span> <span class="k"> */</span>
<a name="246" /><span class="False">     246:</span>  
<a name="247" /><span class="False">     247:</span> <span class="f">#</span><span class="n">define</span> <span class="b">KEYMGR_API_REV_MAJOR</span>        <span class="c">2</span>    <span class="k">/*Major revision number of the keymgr API.*/</span>
<a name="248" /><span class="False">     248:</span> <span class="f">#</span><span class="n">define</span> <span class="b">KEYMGR_API_REV_MINOR</span>        <span class="c">1</span>    <span class="k">/*Minor revision number of the keymgr API.*/</span>
<a name="249" /><span class="False">     249:</span> 
<a name="250" /><span class="False">     250:</span> 
<a name="251" /><span class="False">     251:</span> 
<a name="252" /><span class="False">     252:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">__cplusplus</span>
<a name="253" /><span class="False">     253:</span> <span class="f">}</span>
<a name="254" /><span class="False">     254:</span> <span class="f">#</span><span class="n">endif</span>
<a name="255" /><span class="False">     255:</span> 
<a name="256" /><span class="False">     256:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* __KEYMGR_H */</span>
<a name="257" /><span class="True">     257:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* __APPLE__ etc. */</span>
<a name="258" /><span class="True">     258:</span> <span class="k">/* APPLE LOCAL end keymgr */</span>
<a name="259" /><span class="True">     259:</span> <span class="f">#</span><span class="n">endif</span>
<a name="260" /><span class="True">     260:</span> </pre>
  </body>
</html>
